///*******************************************************************************
// * Copyright (c) 2005, 2006 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.tests.markers;
//
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.io.UnsupportedEncodingException;
//import java.util.ArrayList;
//import java.util.List;
//
//import junit.framework.TestCase;
//import junit.framework.TestSuite;
//
//import org.eclipse.jface.dialogs.DialogSettings;
//import org.eclipse.jface.dialogs.IDialogSettings;
//import org.eclipse.ui.IMemento;
//import org.eclipse.ui.tests.internal.TestMemento;
//import org.eclipse.ui.views.markers.internal.MarkerType;
//import org.eclipse.ui.views.markers.internal.ProblemFilter;
//
///**
// * Testing for https://bugs.eclipse.org/bugs/show_bug.cgi?id=75909 .
// * Only the marker IDs of the selected filters are saved for the Problems view.
// * If a new plugin is deployed with a new MarkerType, when the session 
// * restarts it looks like it was "unselected" from the filter list, and
// * so it doesn't show up.
// * 
// * These tests cover restoring state from old and new settings files.
// * 
// * @since 3.1
// *
// */
//public class Bug75909Test extends TestCase {
//
//	private static final int OLD_SETTINGS_SELECTED = 4;
//
//	private static final String REMOVED_MARKER_ID = "org.eclipse.pde.core.problem";
//
//	private static final String INCLUDED_MARKER_ID = "org.eclipse.core.resources.problemmarker";
//
//	private static final String MISSING_MARKER_ID = "org.eclipse.jdt.core.problem";
//
//	private static final String OLD_DIALOG_SETTINGS_XML = "old_dialog_settings.xml";
//
//	public static TestSuite suite() {
//		return new TestSuite(Bug75909Test.class);
//	}
//
//	/**
//	 * MarkerFilter.resetState() should make all of the available
//	 * MarkerTypes selected.  The just tests that the environment
//	 * has some datafill in it.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testBasicFilter() throws Throwable {
//		ProblemFilter filter = new ProblemFilter("Bug75909Test");
//		filter.resetState();
//
//		List allTypes = new ArrayList();
//		filter.addAllSubTypes(allTypes);
//		int num_types = allTypes.size();
//
//		// there are more than 4 marker types in the default env.
//		assertTrue("There should be more than 4 types in the system",
//				num_types > 4);
//
//		// after a reset, the number of selected types should
//		// equal the total number of types.
//		assertEquals(num_types, filter.getSelectedTypes().size());
//	}
//
//
//	/**
//	 * Settings can be restored (at least once :-) from the old settings
//	 * attribute format.  Any marker type not listed in the attribute
//	 * will appear as not selected.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testRestoreOldState() throws Throwable {
//		IDialogSettings settings = new DialogSettings("Workbench");
//		loadSettings(settings, Bug75909Test.OLD_DIALOG_SETTINGS_XML);
//
//		ProblemFilter filter = new ProblemFilter("Bug75909Test");
//		filter.restoreFilterSettings(getFilterSettings(settings));
//
//		List selected = filter.getSelectedTypes();
//		assertEquals(Bug75909Test.OLD_SETTINGS_SELECTED, selected.size());
//
//		MarkerType marker = getType(filter, Bug75909Test.INCLUDED_MARKER_ID);
//		// this was marked as selected in the old attribute
//		assertTrue(selected.contains(marker));
//
//		MarkerType removed = getType(filter, Bug75909Test.REMOVED_MARKER_ID);
//		// this was missing from the old attribute, so it should not be
//		// selected
//		assertFalse(selected.contains(removed));
//	}
//
//	/**
//	 * When restoring settings from the new attribute, a marker type
//	 * id that is not true or false has just been introduced.  Test that
//	 * the new marker type shows up as selected.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testRestoreNewStateMissingId() throws Throwable {
//		IMemento settings = createMissingMemento();
//
//		ProblemFilter filter = new ProblemFilter("Bug75909Test");
//		filter.restoreState(settings);
//
//		List included = new ArrayList();
//		filter.addAllSubTypes(included);
//		
//		List selected = filter.getSelectedTypes();
//		assertEquals(included.size() - 1, selected.size());
//
//		MarkerType marker = getType(filter, Bug75909Test.INCLUDED_MARKER_ID);
//		// was in the file as true, so it should be selected.
//		assertTrue(selected.contains(marker));
//
//		MarkerType removed = getType(filter, Bug75909Test.REMOVED_MARKER_ID);
//		// was in the file as false, so it won't be selected.
//		assertFalse(selected.contains(removed));
//
//		MarkerType missing = getType(filter, Bug75909Test.MISSING_MARKER_ID);
//		// was missing from the file, so it should be selected.
//		assertTrue(selected.contains(missing));
//	}
//	
//	/**
//	 * Create a missing memento that is missing it's name.
//	 * @return IMemento
//	 */
//	private IMemento createMissingMemento() {
//		TestMemento memento = new TestMemento("filter","Filter Test");
//		memento.putString("selectBySeverity","false");
//		memento.putString("contains","true");
//		memento.putString("enabled","true");
//		memento.putInteger("severity",0);
//		memento.putString("description","");
//		memento.putString("filterOnMarkerLimit","true");
//		memento.putString("selectionStatus" ,"org.eclipse.core.resources.problemmarker:true:org.eclipse.pde.core.problem:false:org.eclipse.jdt.core.buildpath_problem:true:org.eclipse.ant.ui.buildFileProblem:true:");
//		memento.putInteger("onResource",0);
//		return memento;
//	}
//
//	/**
//	 * Get the settings for the filter tag.
//	 * @param settings
//	 * @return IDialogSettings
//	 */
//	private IDialogSettings getFilterSettings(IDialogSettings settings) {
//		return settings.getSection("filter");
//	}
//
//	/**
//	 * MarkerFilter.saveState(IDialogSettings) should now save selected
//	 * types with <b>true</b> and unselected types are now saved to the
//	 * list with <b>false</b>.  This is an "identity transform" test.
//	 * 
//	 * @throws Throwable
//	 */
//	public void testSaveState() throws Throwable {
//		ProblemFilter filter = new ProblemFilter("Bug75909Test");
//		filter.resetState();
//
//		List allTypes = new ArrayList();
//		filter.addAllSubTypes(allTypes);
//
//		MarkerType removed = getType(filter, Bug75909Test.REMOVED_MARKER_ID);
//		
//		filter.getSelectedTypes().remove(removed);
//		// there should be one less select type than all of the types.
//		assertEquals(allTypes.size() - 1, filter.getSelectedTypes().size());
//
//		IMemento settings = new TestMemento("Test","Bug75909Test");
//		filter.saveFilterSettings(settings);
//
//		ProblemFilter f2 = new ProblemFilter("Bug75909Test");
//		f2.restoreState(settings);
//		
//		assertEquals(filter.getSelectedTypes().size(),
//				f2.getSelectedTypes().size());
//		assertFalse(f2.getSelectedTypes().contains(removed));
//	}
//
//
//	private void loadSettings(IDialogSettings settings, String resource)
//			throws UnsupportedEncodingException, IOException {
//		InputStream io = null;
//		try {
//			io = getClass().getResourceAsStream(resource);
//			BufferedReader reader = new BufferedReader(new InputStreamReader(
//					io, "utf-8"));
//			settings.load(reader);
//		} finally {
//			if (io != null) {
//				io.close();
//			}
//		}
//	}
//
//	private MarkerType getType(ProblemFilter filter, String id) {
//		return filter.getMarkerType(id);
//	}
//
//}
